#include <iostream>
#include <string>
#include <sys/timerfd.h>
#include <unistd.h>
#include <cstdint>

int main()
{
    // 创建一个定时器
    int timerfd = timerfd_create(CLOCK_MONOTONIC, 0);
    if (timerfd < 0)
    {
        std::cerr << "timerfd create failed" << std::endl;
        exit(1);
    }

    // 设置超时时间
    struct itimerspec ims;
    // 第一次超时时间为1s后
    ims.it_value.tv_sec = 1;
    ims.it_value.tv_nsec = 0;
    // 第一次超时后，每次超时的间隔时
    ims.it_interval.tv_sec = 1;
    ims.it_interval.tv_nsec = 0;

    // 启动定时器
    int n = timerfd_settime(timerfd, 0, &ims, nullptr);
    if (n < 0)
    {
        std::cerr << "timefd settime failed" << std::endl;
        exit(2);
    }

    for (;;)
    {
        uint64_t data;
        ssize_t n = read(timerfd, &data, 8);
        if (n > 0)
        {
            std::cout << "超时了,距离上一次超时: " << data << std::endl;
        }
    }

    close(timerfd);
    return 0;
}
